package com.gs.pojo;

import com.gs.common.tool.utils.StringUtil;
import com.gs.common.tool.utils.SwingUtil;
import com.gs.pojo.utils.GenerateJavaUtil;

import javax.swing.*;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyledDocument;
import java.awt.*;

/**
 * 启动类
 *
 * @author: guoshuai
 * @date: 2024/05/23 20:39
 **/
//@Slf4j
public class App {

    private static final String fontName = "微软雅黑";


    public static void main(String[] args) {
        //使用事件调度线程确保所有的Swing组件都在AWT线程中安全地构建
        SwingUtilities.invokeLater(App::createJTextPaneAndShowGUI);
    }

    /**
     * 创建gui
     */
    private static void createJTextPaneAndShowGUI() {
        // 创建主窗口
        JFrame frame = new JFrame("pojo反向生成");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 创建GridBagLayout实例
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.BOTH;
        gbc.insets = new Insets(5, 5, 5, 5); // 内边距
        gbc.gridx = 0; // 列位置从0开始
        gbc.gridy = 0; // 行位置从0开始
        gbc.weightx = 0; // 水平权重
        gbc.weighty = 0; // 垂直权重

        // 添加GridBagLayout到窗口
        Container contentPane = frame.getContentPane();
        contentPane.setLayout(new GridBagLayout());

        //第1行: 标签、JButton
        JLabel label = new JLabel("请将索引名、属性信息复制到↓↓↓");
        label.setFont(new Font(fontName, Font.BOLD, 12));
        label.setForeground(Color.RED);
        contentPane.add(label, gbc);
        gbc.gridx = 1;
        JButton clickButton = new JButton("开始生成");
        contentPane.add(clickButton, gbc);

        gbc.gridy++;
        //第2行: JTextArea第1列
        gbc.gridx = 0;
        gbc.gridwidth = 1; // 列
        gbc.weightx = 1; // 允许水平扩展
        gbc.weighty = 1; // 允许垂直扩展

        JTextPane inputTextPane = new JTextPane();
        inputTextPane.setEditable(true);
        contentPane.add(new JScrollPane(inputTextPane), gbc);

        //第2行: JTextArea第2列
        gbc.gridx = 1;
        gbc.gridwidth = 1; //列
        gbc.weightx = 1; // 允许水平扩展
        gbc.weighty = 1; // 允许垂直扩展

        JTextPane outputTextPane = new JTextPane();
        outputTextPane.setEditable(false);
        contentPane.add(new JScrollPane(outputTextPane), gbc);

        //获取StyledDocument用于格式化文本
        StyledDocument doc = outputTextPane.getStyledDocument();
        //创建样式并设置颜色: 红色、蓝色、绿色
        SimpleAttributeSet redAttr = SwingUtil.getAttributeSet(Color.RED);
        SimpleAttributeSet blueAttr = SwingUtil.getAttributeSet(Color.BLUE);
        //SimpleAttributeSet greenAttr = getAttributeSet(Color.GREEN);
        //按钮点击事件
        clickButton.addActionListener(e -> {
            //先清空输出区域
            outputTextPane.setText("");
            //获取inputTextPane
            String indexFieldInfoStr = inputTextPane.getText();
            if (StringUtil.isEmpty(indexFieldInfoStr)) {
                SwingUtil.writeRowText(doc, redAttr, "请输入表结构信息!");
                return;
            }
            try {
                //writeRowText(doc, blueAttr, DateUtil.formatDate(new Date(),"yyyy-MM-dd HH:mm:ss"));
                //生成类
                SwingUtil.writeRowText(doc, blueAttr, GenerateJavaUtil.generatePojo(indexFieldInfoStr));
            } catch (Exception ex) {
                SwingUtil.writeRowText(doc, redAttr, ex.getMessage());
            }
        });

        // 设置窗口大小并使其可见
        frame.pack(); // 自动调整窗口大小以适应其组件
        frame.setSize(1000, 800); // 设置窗口初始大小
        frame.setVisible(true);
    }
}
